///////////////////////////////////////////////////////////////////////////////
///
/// Cylan Client Core
/// Copyright (C) Shenzhen Cylan Tech. Co., Ltd. 2012
///
/// @file       IP_TUNNELSRes.h
/// @brief      IP_TUNNELS  API
///
///////////////////////////////////////////////////////////////////////////////
#ifndef CYLAN_IP_TUNNELSRES_H
#define CYLAN_IP_TUNNELSRES_H

#ifdef __cplusplus
extern "C"{
#endif

#include "Core/Core.h"

/**
 * @struct TCP_TUNNELS_IP_ADDR_TYPE
 * @brief IP资源类型
 */
typedef enum IP_TUNNELS_IP_ADDR_TYPE
{
    IP_ORDOMAINNAME,
    IP_IPRANGE,
    IP_IPSUBNET
} IP_TUNNELS_IP_ADDR_TYPE;

/**
 * @struct IP_TUNNELS_PORT_TYPE
 * @brief IP端口类型
 */
typedef enum IP_TUNNELS_PORT_TYPE
{
	IP_SINGLE_PORT,
	IP_RANGE_PORT,
	IP_SUBNET_PORT
} IP_TUNNELS_PORT_TYPE;

/**
 * @struct IP_TUNNELS_RESOURCE
 * @brief IP_TUNNELS资源信息
 */
typedef struct IP_TUNNELS_RESOURCE
{
    int ID;                             ///< IP_TUNNELS资源ID
    const char* Name;				    ///< IP_TUNNELS资源名称
    const char* Desc;				    ///< IP_TUNNELS资源描述
    const char* Icon;				    ///< IP_TUNNELS图标地址
    char Addr[CC_MAX_URL];			    ///< IP_TUNNELS服务器地址
    const char* szBeginAddr;
    const char* szEndAddr;
    const char* Port;
    const char *ViewGroup;
    const char *SmbUsername;
    const char *SmbPassword;
    const unsigned short *iPortArray;
    const char* Uri;                    ///< IP_TUNNELS链接地址
    int  IconCreateTime;                ///< 图标创建时间
    int  Weight;                        ///< IP_TUNNNELS资源排序
    int  PortArrayLen;
    const char* Protocol;               ///< protocol为http的对应于tcp web资源
    IP_TUNNELS_IP_ADDR_TYPE  Addr_Type; ///< 地址类型
    IP_TUNNELS_PORT_TYPE Port_Type;		///< 端口类型
    int Hidden;                         ///< 是否隐藏
    int Popup;                          ///< 是否自动弹出
} IP_TUNNELS_RESOURCE;

/**
 * @fn int IP_TUNNELSResourceCount(const CHANDLE Session)
 * @brief 返回会话可用的IP_TUNNELS资源个数
 * @param Session 已登陆的Session句柄
 * @return 可用的IP_TUNNELS资源量
 */
int IPTunnelsResourceCount(const CHANDLE Session);

/**
 * @fn CC_STATUS IP_TUNNELSResourceInfo(const CHANDLE Session, int Index, IP_TUNNELS_RESOURCE *Resource, int *Size)
 * @brief 获取IP_TUNNELS资源信息
 * @param Session 已登陆的Session句柄
 * @param Index 资源索引
 * @param Resource 调用者提供的缓冲区以保存资源信息
 * @param Size Resource参数的缓冲区大小. 如果提供的缓冲区太小, 会返回所需的缓冲区大小字节数.
 * @return IP_TUNNELS资源信息
 * @retval ERR_SUCCESS 成功
 * @retval ERR_NOT_FOUND 资源索引超出可用资源个数范围
 * @retval ERR_BUFFER_TOO_SMALL 提供的Resource缓冲区太小
 */
CC_STATUS IPTunnelsResourceInfo(const CHANDLE Session, int Index, IP_TUNNELS_RESOURCE *Resource, int *Size);

#ifdef __cplusplus
}
#endif

#endif /* CYLAN_IP_TUNNELSRES_H */